package com.rzcode.coinex.kernel.dao.entity;

import com.baomidou.mybatisplus.annotation.TableName;
import com.rzcode.coinex.kernel.common.enums.*;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.Date;


/**
 * 广告实体类，用于存储和管理广告信息。
 */
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
@TableName(value = "advertise")
public class Advertise implements Serializable {

    /**
     * 广告的唯一标识符。
     */
    @ApiModelProperty(value = "广告ID", example = "1", required = true)
    private Long id;

    /**
     * 交易价格，可能会实时变动。
     */
    @ApiModelProperty(value = "交易价格", example = "100.50", required = true)
    private BigDecimal price;

    /**
     * 广告类型，买入或卖出。
     */
    @ApiModelProperty(value = "广告类型", allowableValues = "0:买入, 1:卖出", example = "0", required = true)
    private AdTypeEnum adTypeEnum;

    /**
     * 广告的拥有者。
     */
    @ApiModelProperty(value = "广告拥有者", required = true)
    private Member member;

    /**
     * 广告的创建时间。
     */
    @ApiModelProperty(value = "广告创建时间", example = "2023-01-01 12:00:00", required = true)
    private Date createTime;

    /**
     * 广告的最后更新时间。
     */
    @ApiModelProperty(value = "广告最后更新时间", example = "2023-01-01 12:00:00", required = true)
    private LocalDateTime updateTime;

    /**
     * 广告对应的币种。
     */
    @ApiModelProperty(value = "币种", required = true)
    private OtcCoin coin;

    /**
     * 广告相关的国家。
     */
    @ApiModelProperty(value = "国家", required = true)
    private Country country;

    /**
     * 最低单笔交易金额。
     */
    @ApiModelProperty(value = "最低单笔交易额", example = "100.00", required = true)
    private BigDecimal minLimit;

    /**
     * 最高单笔交易金额。
     */
    @ApiModelProperty(value = "最高单笔交易额", example = "1000.00", required = true)
    private BigDecimal maxLimit;

    /**
     * 广告的备注信息。
     */
    @ApiModelProperty(value = "备注")
    private String remark;

    /**
     * 付款期限，以分钟为单位。
     */
    @ApiModelProperty(value = "付款期限", example = "10", required = true)
    private Integer timeLimit;

    /**
     * 溢价百分比。
     */
    @ApiModelProperty(value = "溢价百分比", example = "0.0005")
    private BigDecimal premiseRate;

    /**
     * 广告级别。
     */
    @ApiModelProperty(value = "广告级别", required = true)
    private AdLevelEnum level;

    /**
     * 支持的支付方式。
     */
    @ApiModelProperty(value = "支付方式", example = "bank_transfer,paypal")
    private String payMode;

    /**
     * 数据库乐观锁版本号。
     */
    @ApiModelProperty(hidden = true)
    private Long version;

    /**
     * 广告的上下架状态。
     */
    @ApiModelProperty(value = "广告状态", allowableValues = "0:下架, 1:上架", example = "1", required = true)
    private AdControlStateEnum status;

    /**
     * 价格类型。
     */
    @ApiModelProperty(value = "价格类型", required = true)
    private PriceTypeEnum priceType;

    /**
     * 计划交易的数量。
     */
    @ApiModelProperty(value = "计划数量", example = "1000.00000000", required = true)
    private BigDecimal number;

    /**
     * 当前正在交易的数量。
     */
    @ApiModelProperty(value = "交易中数量", example = "100.00000000")
    private BigDecimal dealAmount;

    /**
     * 计划剩余未交易的数量。
     */
    @ApiModelProperty(value = "计划剩余数量", example = "900.00000000")
    private BigDecimal remainAmount;

    /**
     * 是否开启自动回复功能。
     */
    @ApiModelProperty(value = "是否开启自动回复", allowableValues = "true,false", example = "false")
    private BooleanEnum auto;

    /**
     * 市场参考价格。
     */
    @ApiModelProperty(value = "市场价", example = "100.00", hidden = true)
    private BigDecimal marketPrice;

    /**
     * 自动回复的内容。
     */
    @ApiModelProperty(value = "自动回复内容")
    private String autoWord;

    /**
     * 限制金额。
     */
    @ApiModelProperty(value = "限制金额")
    private String limitMoney;

    /**
     * 用户名。
     */
    @ApiModelProperty(value = "用户名")
    private String username;

    /**
     * 币种单位。
     */
    @ApiModelProperty(value = "币种单位")
    private String coinUnit;
}
